001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Apr 24, 2003
005     * Time: 9:56:40 PM
006     */
007    
008    package EVolve.util.phasedetectors;
009    
010    import EVolve.data.*;
011    import EVolve.Scene;
012    import EVolve.util.equators.UnorderedUnlimitedSet;
013    import EVolve.visualization.XYViz.ValRefViz.HotSpotViz.HotSpotVisualization;
014    import EVolve.visualization.ReferenceDimension;
015    import java.util.*;
016    
017    public class PhaseEntityTrigger {
018        private UnorderedUnlimitedSet trigger;
019        private int state[];
020        private final int triggerFound = 1;
021    
022        public PhaseEntityTrigger() {
023        }
024    
025        public ArrayList gatherTiggeredPhase(ArrayList data, int noiseTolerance) {
026            ArrayList phase = new ArrayList();
027            Selection activeSelection = Scene.getFilter().getActiveSelection();
028    
029            if (activeSelection == null) {
030                Scene.showErrorMessage("No active selection.");
031                return phase;
032            }
033    
034            state = new int[data.size()];
035            for (int i=0; i<state.length; i++) {
036                state[i] = 0;
037            }
038    
039            HotSpotVisualization visual = (HotSpotVisualization)Scene.getVisualizationManager().getActiveVisualization();
040            HashMap entityName2Int = ((ReferenceDimension)visual.getDimension()[1]).getEntityName2IntMap();
041            trigger = new UnorderedUnlimitedSet();
042    
043            Entity[] entities = activeSelection.getSelected();
044            for (int i=0; i<entities.length; i++) {
045                int mappedId = ((Integer)entityName2Int.get(entities[i].getName())).intValue();
046                trigger.addElement(mappedId);
047            }
048    
049    
050            for (int i=0; i<data.size(); i++) {
051                UnorderedUnlimitedSet current = (UnorderedUnlimitedSet)data.get(i);
052    
053                if (current.intersection(trigger).size() == trigger.size() ) {
054                    state[i] = triggerFound;
055                }
056            }
057    
058            int noise = 0;
059            for (int i=0; i<state.length; i++) {
060                if (state[i] == triggerFound) {
061                    noise ++;
062                    if (noise > noiseTolerance) {
063                        phase.add(new Integer(i-noise+1));
064                        noise = 0;
065                    }
066                } else {
067                    noise = 0;
068                }
069            }
070    
071            return phase;
072        }
073    }